package com.storm.datasource.util

import com.baomidou.mybatisplus.core.metadata.OrderItem
import com.baomidou.mybatisplus.extension.plugins.pagination.Page

/**
 * 分页组装组件
 */
open class PageBase {
    /**
     * 每页大小
     */
    var size: Long = 30
    /**
     * 第几页
     */
    var index: Long = 1
    /**
     * 倒序字段（建议加入白名单对比，防止sql注入）
     */
    var descs: Array<String> = emptyArray()
    /**
     * 正序字段 (建议加入白名单对比，防止sql注入）
     */
    var ascs: Array<String> = emptyArray()
    /**
     * 获取mybatis-plus内置分页插件
     */
    fun <T> getPage(): Page<T> {
        return Page<T>(index,size).apply {
            orderItems().let {
                if (it.isNotEmpty()) {
                    orders = it
                }
            }
        }
    }
    /**
     * 组装排序条件
     */
    private fun orderItems(): ArrayList<OrderItem> {
        val orderItemList = ArrayList<OrderItem>()
        ascs.forEach { asc ->  orderItemList.add(OrderItem.asc(asc))  }
        descs.forEach { desc -> orderItemList.add(OrderItem.desc(desc)) }
        return orderItemList
    }

}


